package org.nettyServer.connectionManage;

import io.netty.channel.Channel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import org.nettyServer.eunm.EMessageCode;

import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

@Data
@Builder
@AllArgsConstructor
public class ClientInfo {
    /**
     * 客户端ip
     */
    private String ip;

    /**
     * 客户端端口
     */
    private String port;

    /**
     * 客户端信道
     */
    private Channel channel;

    /**
     * 客户端连接时间
     */
    private long connectTime;

    /**
     * 最后活跃时间
     */
    private long lastActiveTime;

    /**
     *  发送信息
     */
    @Builder.Default
    private MessageInfo sendInfo=MessageInfo.builder().build();

    /**
     * 有效接收信息
     */
    @Builder.Default
    private MessageInfo receiveInfo=MessageInfo.builder().build();

    /**
     * 接收到每种类型消息的信息
     */
    @Builder.Default
    private Map<String,MessageInfo> receiveMessageInfoMap=init();

    /**
     * 发送的每种类型消息的信息
     */
    @Builder.Default
    private Map<String,MessageInfo> sendMessageInfoMap=init();

    //初始化所有类型的消息信息
    public static Map<String,MessageInfo> init(){
        HashMap<String, MessageInfo> map = new HashMap<>();
        Arrays.stream(EMessageCode.values()).forEach(e->{
            map.put(e.getCode(), MessageInfo.builder().build());
        });
        return map;
    }


    @Data
    @Builder
    public static class MessageInfo {
        /**
         * 次数
         */
        @Builder.Default
        private Long count=0L;

        /**
         * 大小
         */
        @Builder.Default
        private Long bytes=0L;


    }

}
